package com.yz.fanrenmianshi.constant;

/**
 * 评论点赞Redis常量类
 * 定义评论点赞功能在Redis中使用的键名规范
 */
public class CommentThumbRedisConstant {

    /**
     * 评论点赞集合键名前缀
     * 格式：like:comment:{commentId}
     * 用途：存储某个评论的所有点赞用户ID集合，使用Set数据结构
     */
    public static final String COMMENT_LIKE_SET_KEY_PREFIX = "like:comment:";

    /**
     * 评论点赞数量键名前缀
     * 格式：count:comment:{commentId}
     * 用途：存储某个评论的点赞总数，使用String数据结构
     */
    public static final String COMMENT_LIKE_COUNT_KEY_PREFIX = "count:comment:";

    /**
     * 用户点赞评论集合键名前缀
     * 格式：user:like:comment:{userId}
     * 用途：存储某个用户点赞的所有评论ID集合，使用Set数据结构
     * 可用于查询用户点赞了哪些评论
     */
    public static final String USER_LIKE_COMMENT_SET_KEY_PREFIX = "user:like:comment:";

    /**
     * 获取评论点赞集合的完整键名
     * @param commentId 评论ID
     * @return 完整的Redis键名
     */
    public static String getCommentLikeSetKey(Long commentId) {
        return COMMENT_LIKE_SET_KEY_PREFIX + commentId;
    }

    /**
     * 获取评论点赞数量的完整键名
     * @param commentId 评论ID
     * @return 完整的Redis键名
     */
    public static String getCommentLikeCountKey(Long commentId) {
        return COMMENT_LIKE_COUNT_KEY_PREFIX + commentId;
    }

    /**
     * 获取用户点赞评论集合的完整键名
     * @param userId 用户ID
     * @return 完整的Redis键名
     */
    public static String getUserLikeCommentSetKey(Long userId) {
        return USER_LIKE_COMMENT_SET_KEY_PREFIX + userId;
    }

    /**
     * 点赞数据异步持久化锁键名
     * 格式：lock:thumb:sync:{commentId}
     * 用途：防止并发情况下重复同步同一个评论的点赞数据
     */
    public static final String THUMB_SYNC_LOCK_KEY_PREFIX = "lock:thumb:sync:";

    /**
     * 获取点赞数据同步锁的完整键名
     * @param commentId 评论ID
     * @return 完整的Redis键名
     */
    public static String getThumbSyncLockKey(Long commentId) {
        return THUMB_SYNC_LOCK_KEY_PREFIX + commentId;
    }

    /**
     * 点赞数据同步锁过期时间（秒）
     * 默认5分钟
     */
    public static final long THUMB_SYNC_LOCK_EXPIRE_SECONDS = 300;

    /**
     * 评论点赞数据过期时间（秒）
     * 默认7天
     * 如果评论7天内没有新的点赞操作，相关Redis数据将被清理
     */
    public static final long COMMENT_THUMB_DATA_EXPIRE_SECONDS = 7 * 24 * 60 * 60;

    /**
     * 点赞数量缓存过期时间（秒）
     * 默认1小时
     * 用于控制点赞数量缓存的刷新频率
     */
    public static final long COMMENT_THUMB_COUNT_EXPIRE_SECONDS = 3600;

    /**
     * 点赞限流键名前缀
     * 格式：rate:limit:thumb:{userId}
     * 用途：存储用户点赞操作的限流计数器
     */
    public static final String THUMB_RATE_LIMIT_KEY_PREFIX = "rate:limit:thumb:";

    /**
     * 获取点赞限流键的完整键名
     * @param userId 用户ID
     * @return 完整的Redis键名
     */
    public static String getThumbRateLimitKey(Long userId) {
        return THUMB_RATE_LIMIT_KEY_PREFIX + userId;
    }

    /**
     * 点赞限流时间窗口（秒）
     * 默认1秒
     */
    public static final long THUMB_RATE_LIMIT_WINDOW_SECONDS = 1;

    /**
     * 点赞限流阈值（次）
     * 默认5次/秒
     */
    public static final long THUMB_RATE_LIMIT_THRESHOLD = 5;
}